#ifndef lint
static char const 
yyrcsid[] = "$FreeBSD: src/usr.bin/yacc/skeleton.c,v 1.28 2000/01/17 02:04:06 bde Exp $";
#endif
#include <stdlib.h>
#define YYBYACC 1
#define YYMAJOR 1
#define YYMINOR 9
#define YYLEX yylex()
#define YYEMPTY -1
#define yyclearin (yychar=(YYEMPTY))
#define yyerrok (yyerrflag=0)
#define YYRECOVERING() (yyerrflag!=0)
static int yygrowstack();
#define YYPREFIX "yy"
#line 2 "st.y"
#include <string.h>
#include <stdio.h>
#include "st.h"
int g_depth = 0;

struct symtab sym_tab[NSYMS];

#line 11 "st.y"
typedef union {
	int val;
	char *str;
	struct symtab *symp;
	struct sym_list *sl;
} YYSTYPE;
#line 32 "y.tab.c"
#define YYERRCODE 256
#define IDENTIFIER 257
#define STRING_LITERAL 258
#define CONSTANT 259
#define SIZEOF 260
#define PTR_OP 261
#define INC_OP 262
#define DEC_OP 263
#define LEFT_OP 264
#define RIGHT_OP 265
#define LE_OP 266
#define GE_OP 267
#define EQ_OP 268
#define NE_OP 269
#define AND_OP 270
#define OR_OP 271
#define MUL_ASSIGN 272
#define DIV_ASSIGN 273
#define MOD_ASSIGN 274
#define ADD_ASSIGN 275
#define SUB_ASSIGN 276
#define LEFT_ASSIGN 277
#define RIGHT_ASSIGN 278
#define AND_ASSIGN 279
#define XOR_ASSIGN 280
#define OR_ASSIGN 281
#define TYPE_NAME 282
#define ANY_WORD 283
#define TYPEDEF 284
#define EXTERN 285
#define STATIC 286
#define AUTO 287
#define REGISTER 288
#define INLINE 289
#define RESTRICT 290
#define CHAR 291
#define SHORT 292
#define INT 293
#define LONG 294
#define SIGNED 295
#define UNSIGNED 296
#define FLOAT 297
#define DOUBLE 298
#define CONST 299
#define VOLATILE 300
#define VOID 301
#define BOOL 302
#define COMPLEX 303
#define IMAGINARY 304
#define STRUCT 305
#define UNION 306
#define ENUM 307
#define ELLIPSIS 308
#define CASE 309
#define DEFAULT 310
#define IF 311
#define ELSE 312
#define SWITCH 313
#define WHILE 314
#define DO 315
#define FOR 316
#define GOTO 317
#define CONTINUE 318
#define BREAK 319
#define RETURN 320
#define ATTRIBUTE 321
const short yylhs[] = {                                        -1,
    7,    7,    7,    7,    9,    9,    9,    9,    9,    9,
    9,    9,    9,    9,   10,   10,   14,   14,   14,   14,
   14,   14,   15,   15,   15,   15,   15,   15,   16,   16,
   17,   17,   17,   17,   18,   18,   18,   19,   19,   19,
   20,   20,   20,   20,   20,   21,   21,   21,   22,   22,
   23,   23,   24,   24,   25,   25,   26,   26,   27,   27,
   13,   13,   28,   28,   28,   28,   28,   28,   28,   28,
   28,   28,   28,    8,    8,   29,   30,   30,    2,    2,
    2,    2,    2,    2,    2,    2,    6,    6,    5,    5,
    1,    1,    1,    1,    1,   31,   31,   31,   31,   31,
   31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
   35,   35,   35,   35,   37,   37,   38,   38,   39,   39,
   40,   40,   40,   40,   40,   40,   41,   41,   41,   43,
   43,   43,   43,   43,   43,   36,   36,   36,   36,   36,
   44,   44,   45,   45,   32,   32,   32,   33,    4,    4,
    3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
    3,    3,    3,   46,   46,   46,   46,   47,   47,   48,
   48,   50,   50,   51,   51,   51,   49,   49,   11,   11,
   52,   52,   52,   53,   53,   53,   53,   53,   53,   53,
   53,   53,   53,   53,   34,   34,   34,   12,   12,   12,
   12,   54,   55,   55,   56,   56,   57,   57,   57,   57,
   57,   57,   58,   58,   58,   59,   59,   64,   64,   65,
   65,   60,   60,   61,   61,   61,   62,   62,   62,   62,
   62,   62,   63,   63,   63,   63,   63,    0,    0,   66,
   66,   67,   67,   68,   68,   42,
};
const short yylen[] = {                                         2,
    1,    1,    1,    3,    1,    4,    3,    4,    3,    3,
    2,    2,    6,    7,    1,    3,    1,    2,    2,    2,
    2,    4,    1,    1,    1,    1,    1,    1,    1,    4,
    1,    3,    3,    3,    1,    3,    3,    1,    3,    3,
    1,    3,    3,    3,    3,    1,    3,    3,    1,    3,
    1,    3,    1,    3,    1,    3,    1,    3,    1,    5,
    1,    3,    1,    1,    1,    1,    1,    1,    1,    1,
    1,    1,    1,    1,    3,    1,    2,    3,    1,    2,
    1,    2,    1,    2,    1,    2,    1,    3,    1,    3,
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    5,    4,    4,    2,    1,    1,    1,    2,    3,    2,
    2,    1,    2,    1,    2,    1,    1,    3,    4,    1,
    2,    2,    3,    3,    4,    4,    5,    5,    6,    2,
    1,    3,    1,    3,    1,    1,    1,    1,    2,    1,
    1,    3,    5,    4,    4,    6,    6,    5,    4,    3,
    4,    4,    3,    1,    2,    2,    3,    1,    2,    1,
    3,    1,    3,    2,    2,    1,    1,    3,    1,    2,
    1,    1,    2,    3,    2,    3,    3,    4,    3,    4,
    2,    3,    3,    4,    1,    3,    4,    1,    2,    3,
    4,    2,    1,    2,    3,    2,    1,    1,    1,    1,
    1,    1,    3,    4,    3,    2,    3,    1,    2,    1,
    1,    1,    2,    5,    7,    5,    5,    7,    6,    7,
    6,    7,    3,    2,    2,    2,    3,    1,    2,    1,
    1,    4,    3,    1,    2,    1,
};
const short yydefred[] = {                                      0,
  110,   91,   92,   93,   94,   95,  148,  146,   97,   98,
   99,  100,  103,  104,  101,  102,  145,  147,   96,  105,
  106,  107,  115,  116,    0,    0,    0,    0,  241,    0,
    0,    0,  108,  109,    0,  238,  240,    0,    0,  239,
   80,  151,    0,    0,   77,    0,    0,   87,    0,    0,
   82,   84,   86,    0,    0,    0,    0,    0,  141,    0,
  168,  166,    0,    0,    0,    0,    0,    0,  244,  243,
    0,    0,   78,    0,    0,  246,    0,    0,    0,  117,
    0,    0,    0,    0,  136,    0,  152,  169,  167,  177,
  163,    0,    0,    0,    0,  172,    1,    3,    2,    0,
    0,    0,    0,    0,  160,   23,    0,   25,   26,   27,
   28,    5,    0,    0,    0,    0,   31,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,   61,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,  216,   24,  222,    0,   74,  220,  221,  207,  208,
  209,  210,  211,  212,    0,  218,    0,  195,   90,    0,
  245,  242,   88,  112,    0,  121,  123,  113,  118,    0,
  120,    0,    0,  127,  125,  137,    0,   29,   76,  144,
  138,  142,    0,    0,  174,    0,  175,    0,  161,  162,
    0,    0,    0,   21,    0,   18,   19,    0,    0,    0,
    0,  159,    0,   11,   12,    0,    0,    0,  155,   64,
   65,   66,   67,   68,   69,   70,   71,   72,   73,   63,
    0,   20,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,  154,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,  234,  235,  236,    0,    0,  223,
  217,  219,    0,    0,    0,  198,    0,    0,  203,  111,
    0,    0,  131,    0,  119,  139,  191,    0,    0,  185,
    0,    0,    0,    0,    0,  178,  171,  173,    0,    0,
    0,    4,    0,    0,    0,  180,   10,    7,    0,   15,
    0,    9,   62,   32,   33,   34,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,  158,  153,  213,    0,  215,    0,    0,
    0,    0,    0,    0,  233,  237,   75,    0,  206,  196,
    0,  199,  202,  204,  133,    0,    0,  128,  192,  184,
  189,  186,  193,    0,  187,    0,    0,    0,    0,  156,
    0,   30,    8,    0,    6,    0,  157,  214,    0,    0,
    0,    0,    0,    0,  205,  197,  200,    0,  135,  129,
  194,  190,  188,    0,   16,   60,    0,  226,  227,    0,
    0,    0,    0,    0,  201,   13,    0,    0,    0,  231,
    0,  229,    0,   14,  225,  228,  232,  230,
};
const short yydgoto[] = {                                      26,
   27,   68,   46,  172,   48,   49,  112,  145,  113,  299,
  200,  265,  146,  115,  116,  117,  118,  119,  120,  121,
  122,  123,  124,  125,  126,  127,  128,  221,  180,   29,
   30,   31,   32,  266,   33,   34,   35,   79,   80,   81,
  173,   82,  174,   58,   59,   50,   63,  278,   94,   95,
   96,  279,  188,  267,  268,  269,  148,  149,  150,  151,
  152,  153,  154,  155,  156,   36,   37,   71,
};
const short yysindex[] = {                                   2642,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0, -100, 2642, 2642,   37,    0, 2642,
 2642, 2642,    0,    0,  -98,    0,    0,  -55, -198,    0,
    0,    0,  -26,  -37,    0,   34, 1801,    0,    2,  -34,
    0,    0,    0,    1, 2554, -198,   30,  -20,    0,  133,
    0,    0,  -37,  251, 1766,  109, 2168,   37,    0,    0,
 2496,  -26,    0,   34, 2304,    0, 2554, 2554, 2352,    0,
  104, 2554,   -7, 2438,    0,  -78,    0,    0,    0,    0,
    0,   12,  144,  163,  156,    0,    0,    0,    0, 2457,
 2465, 2465, -117,   43,    0,    0,  112,    0,    0,    0,
    0,    0,   -4,  171,   79, 2438,    0,  166,   35, -127,
   48,  -22,  234,  172,  160,   25,  -52,    0, 1774,  246,
 2438,  253,  278,  289,  330,   64,  336,  176,  376,  395,
 2188,    0,    0,    0,   67,    0,    0,    0,    0,    0,
    0,    0,    0,    0,  184,    0, 2157,    0,    0,  404,
    0,    0,    0,    0, 2444,    0,    0,    0,    0, 2438,
    0,  -54,  140,    0,    0,    0,  -76,    0,    0,    0,
    0,    0, 1444, 2199,    0,   -9,    0,   80,    0,    0,
  250, 2606,   43,    0,   43,    0,    0, 1782,  168,  470,
  125,    0,  265,    0,    0, 2229, 2438,  275,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 2438,    0, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438,
 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438,
 2438, 2438,    0,  441,  467,   64,  503,   64, 2438, 2438,
 2438,  254, 1660,  510,    0,    0,    0,  201, 2438,    0,
    0,    0, 2438,  320,    9,    0, 2168,  228,    0,    0,
  257, 2438,    0,   -1,    0,    0,    0,  538,  539,    0,
  490,  491,   80, 1686, 2265,    0,    0,    0,  545,  552,
  506,    0, 2257, 1712,  158,    0,    0,    0,  229,    0,
  128,    0,    0,    0,    0,    0,  166,  166,   35,   35,
 -127, -127, -127, -127,   48,   48,  -22,  234,  172,  160,
   25,  224,  512,    0,    0,    0,   64,    0,  393,  411,
  423,  556, 2273, 2273,    0,    0,    0,  513,    0,    0,
 2127,    0,    0,    0,    0,  257,  108,    0,    0,    0,
    0,    0,    0,  571,    0,  522,  524,  493,  493,    0,
 2157,    0,    0, 2438,    0, 2438,    0,    0,   64,   64,
   64, 2438, 2286, 2427,    0,    0,    0, 2168,    0,    0,
    0,    0,    0,   14,    0,    0,  308,    0,    0,  465,
   64,  475,   64,  477,    0,    0, 2138,   64,  562,    0,
   64,    0,   64,    0,    0,    0,    0,    0,
};
const short yyrindex[] = {                                      0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,   31,    0,    0,  239,
  591,  937,    0,    0,    0,    0,    0, 1105,    0,    0,
    0,    0,    0,  174,    0, 1259,  249,    0,    0,    0,
    0,    0,    0, 1218,    0,    0,   45,    0,    0,    0,
    0,    0,  484,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0, 1297,    0,    0,  523,  560,    0,    0,
    0,  652,    0,    0,    0,    0,    0,    0,    0,    0,
    0,  479,    0,    0,  589,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0, 2514,    0,    0,    0,
    0,    0,  529,    0, 2099,    0,    0,  603,  192,  908,
  -31,    7, 1402, 1564,  659,  614,   71,    0,    0, 2072,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,  249,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,  373,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,  485,    0,  486,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  593,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0, 2514,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  377,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 2514,    0,  518,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,  595,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,  626,  817,  840,  863,
  931,  954,  977, 1000,  117, 1110, 1148, 1404, 1566, 1572,
 1592,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,  386,    0,    0,    0,    0,
    0,    0,    0,    0,    0, 2514,    0,  566,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,  472,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,
};
const short yygindex[] = {                                      0,
    0,    3,  -33, 1047,  565,    0,    0, 1517,    0,    0,
  -50,  277,  -65, 1056,    0,  -32,  136,  161,  218,  205,
  403,  405,  402,  406,  409,    0,  -75,    0,  322,  -28,
 1375, 2760,    0,  -66,    0,    0,    0,  568,  -29,  745,
    0, -157, -219,  596,  -64,  -23,  141,  -56,    0,    0,
  464,  -80, -160, -281,    0,  389, 1394,    0,  -27, -235,
    0,    0,    0,    0,  519,  642,    0,    0,
};
#define YYTABLESIZE 2958
const short yytable[] = {                                     114,
  159,  158,   28,  272,   44,   43,   46,   93,  179,   46,
  241,  187,   46,   43,  273,   44,   74,  334,   69,   70,
   62,  182,   39,   86,   55,  283,   46,   46,   28,   41,
  183,   46,   51,   52,   53,  206,  177,  147,   43,   89,
   44,  208,  161,  162,   49,   72,  181,   49,  276,  169,
   49,  183,  341,   44,  348,  179,  170,  397,   57,  378,
   73,   46,   46,  245,   49,   49,   92,   56,  186,   49,
   79,   79,   79,   64,   79,  111,   43,  226,   44,  227,
  106,  184,  104,  222,  143,  108,  207,  109,  143,   79,
   84,  158,   46,   46,  179,   45,  111,  373,  374,   49,
   49,  106,  184,  104,   85,  143,  108,  232,  109,  233,
  259,   59,  182,  345,   59,  378,  347,  176,  282,  284,
  296,   79,  144,   75,   65,  260,  147,  380,   59,   59,
   49,   49,  291,  340,  283,  169,  228,  229,  396,  220,
  300,  111,  289,   43,  290,   44,  106,   43,  104,   44,
  143,  108,   74,  109,   47,  303,   38,   47,   54,  186,
   47,  170,  171,   59,  294,  170,   44,  144,  110,  143,
  285,  259,    8,   87,   47,   47,  323,  295,   57,   47,
   57,   17,   18,  274,  189,   92,   66,  179,  379,  110,
  304,  305,  306,  337,   92,   59,  179,  294,  275,  192,
  342,  158,  225,  190,  202,  129,  191,  223,  292,   47,
   47,  259,  224,  164,  164,  184,  111,  164,  240,  357,
  365,  106,   42,  104,  333,  143,  108,  354,  109,   38,
   42,   66,   38,  142,  110,   38,   46,   46,   46,   46,
   47,   47,  144,  198,  259,  234,  235,   42,  184,   38,
   38,   38,    8,   38,   38,   42,  203,  204,  205,  336,
  362,   17,   18,  209,  164,  237,   76,  259,   42,  363,
  295,  236,  364,  264,  377,  158,   49,   49,   81,   81,
   81,  366,   81,  238,   38,   38,   92,   79,  343,   46,
  386,   91,   89,   42,  239,  158,   92,   81,  385,   97,
   98,   99,  100,  246,  101,  102,   66,   89,  261,  110,
  248,  395,  158,  230,  231,   38,   38,  249,  263,   76,
  130,   98,   99,  100,    1,  101,  102,   49,  250,   81,
  377,  158,    8,    9,   10,   11,   12,   13,   14,   15,
   16,   17,   18,   19,   20,   21,   22,   23,   24,   25,
  210,  211,  212,  213,  214,  215,  216,  217,  218,  219,
   42,  307,  308,   76,   42,  130,   98,   99,  100,  251,
  101,  102,  131,  132,  133,  253,  134,  135,  136,  137,
  138,  139,  140,  141,   47,   47,   47,   47,  309,  310,
    1,   59,    2,    3,    4,    5,    6,    7,    8,    9,
   10,   11,   12,   13,   14,   15,   16,   17,   18,   19,
   20,   21,   22,   23,   24,   25,  130,  131,  132,  133,
  132,  134,  135,  136,  137,  138,  139,  140,  141,  134,
  164,  130,  254,  369,  255,  132,  259,   47,  315,  316,
  130,   98,   99,  100,  134,  101,  102,  311,  312,  313,
  314,  370,  247,  256,  259,   38,   38,   38,   38,   38,
   38,   38,   38,  371,   67,    1,  259,    2,    3,    4,
    5,    6,    7,    8,    9,   10,   11,   12,   13,   14,
   15,   16,   17,   18,   19,   20,   21,   22,   23,   24,
   25,  271,  131,  132,  133,   81,  134,  135,  136,  137,
  138,  139,  140,  141,  224,  399,  286,   90,  259,  224,
  293,  224,   38,  224,  224,  401,  224,  403,  259,  176,
  259,  297,  176,  165,  165,  181,  182,  165,  181,  182,
  224,  302,    1,  324,    2,    3,    4,    5,    6,    7,
    8,    9,   10,   11,   12,   13,   14,   15,   16,   17,
   18,   19,   20,   21,   22,   23,   24,   25,  183,  325,
  327,  183,  122,  122,  122,   17,   17,  332,  335,   17,
   17,   17,   17,   17,  165,   17,  339,   76,  349,  350,
  122,  122,  351,  352,  338,  358,   17,   17,   17,   17,
   17,   17,  359,  346,  224,  372,  224,  224,  360,  124,
  124,  124,   22,   22,  367,  375,   22,   22,   22,   22,
   22,  381,   22,  122,  382,  361,  383,  124,  124,  398,
  406,   17,   17,   22,   22,   22,   22,   22,   22,  170,
   83,   83,   83,  179,   83,  181,  163,  384,  317,  319,
   35,  318,  165,   35,  320,   35,   35,   35,  321,   83,
  124,   83,   17,   17,   57,  288,  344,   57,   22,   22,
   35,   35,   35,   36,   35,   35,   36,   40,   36,   36,
   36,   57,   57,  262,    0,    0,   57,    0,    0,    0,
    0,   83,    0,   36,   36,   36,    0,   36,   36,   22,
   22,  126,  126,  126,    0,   35,   35,    0,    0,   55,
    0,    0,   55,    0,    0,    0,   57,    0,    0,  126,
  126,    0,    0,    0,    0,    0,   55,   55,   36,   36,
    0,   55,    0,    0,    0,    0,   35,   35,  224,  224,
  224,  224,    0,  224,  224,    0,    0,    0,   57,    0,
  165,    0,  126,    0,    0,    0,    0,    0,    0,   36,
   36,   55,    0,  224,    0,  224,  224,  224,  224,  224,
  224,  224,  224,  224,  224,  224,  224,  224,  224,  224,
  224,  224,  224,  224,  224,  224,  224,  224,  224,  122,
  224,  224,  224,   55,  224,  224,  224,  224,  224,  224,
  224,  224,   17,   17,   17,   17,   17,   17,   17,   17,
   17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
    0,    0,    0,    0,    0,    0,  124,    0,    0,    0,
    0,  166,  167,    0,    0,    0,  175,    0,    0,   22,
   22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
   22,   22,   22,   22,   22,   22,   22,   83,  201,   17,
    0,    0,    0,    0,   37,    0,    0,   37,    0,   37,
   37,   37,    0,    0,    0,    0,   35,   35,   35,   35,
   35,   35,   35,   35,   37,   37,   37,   39,   37,   37,
   39,    0,    0,   39,   57,    0,   22,    0,    0,   36,
   36,   36,   36,   36,   36,   36,   36,   39,   39,   39,
   40,   39,   39,   40,    0,    0,   40,    0,  126,   37,
   37,    0,    0,    0,    0,    0,    0,    0,    0,    0,
   40,   40,   40,   35,   40,   40,    0,    0,   55,   55,
    0,    0,   39,   39,   57,    0,    0,  201,    0,  201,
   37,   37,    0,    0,    0,   41,   36,    0,   41,    0,
    0,   41,    0,    0,    0,   40,   40,    0,    0,    0,
    0,    0,    0,   39,   39,   41,   41,   41,   44,   41,
   41,   44,    0,    0,   44,    0,   85,   85,   85,   55,
   85,    0,    0,    0,    0,    0,   40,   40,   44,   44,
   44,   45,   44,   44,   45,   85,    0,   45,    0,    0,
   41,   41,    0,    0,    0,    0,    0,    0,    0,    0,
    0,   45,   45,   45,   42,   45,   45,   42,    0,    0,
   42,    0,    0,   44,   44,    0,    0,   85,    0,    0,
    0,   41,   41,    0,   42,   42,   42,   43,   42,   42,
   43,    0,    0,   43,    0,    0,   45,   45,    0,    0,
    0,    0,    0,    0,   44,   44,    0,   43,   43,   43,
    0,   43,   43,    0,    0,    0,    0,    0,    0,   42,
   42,    0,    0,    0,   47,    0,    0,   45,   45,    0,
   37,   37,   37,   37,   37,   37,   37,   37,    0,   60,
    0,    0,   43,   43,    0,    0,    0,    0,    0,    0,
   42,   42,    0,   39,   39,   39,   39,   39,   39,   39,
   39,    0,    0,    0,  160,    0,    0,    0,  160,    0,
    0,    0,    0,   43,   43,    0,   40,   40,   40,   40,
   40,   40,   40,   40,    0,    0,    0,   37,  185,  178,
    0,    0,    0,    0,  140,  140,  140,   48,  140,    0,
   48,    0,    0,   48,    0,  194,  196,  197,    0,    0,
   39,    0,  140,  140,    0,    0,    0,   48,   48,    0,
    0,  178,   48,   41,   41,   41,   41,   41,   41,    0,
    0,    0,    0,   40,    0,   50,  178,    0,   50,    0,
    0,   50,    0,   85,    0,  140,   44,   44,   44,   44,
   44,   44,   48,   48,    0,   50,   50,    0,    0,    0,
   50,    0,    0,    0,    0,    0,    0,    0,    0,   45,
   45,   45,   45,   45,   45,  178,    0,    0,   41,   60,
    0,    0,    0,   48,   48,    0,    0,    0,    0,    0,
   50,   50,   42,   42,   42,   42,   42,   42,    0,    0,
    0,   44,    0,    0,    0,    0,    0,  114,  114,  114,
    0,  114,    0,    0,    0,   43,   43,   43,   43,   43,
   43,   50,   50,    0,   45,  114,  114,    0,  178,  178,
  178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
  178,  178,  178,  178,  178,  178,    0,   42,    0,  150,
    0,    0,  150,    0,    0,    0,    0,    0,  114,    0,
    0,    0,    0,    0,    0,    0,  150,  150,  178,  150,
   43,    0,    0,    0,    0,    0,    0,  178,    0,    0,
    0,    0,    0,    0,    0,    0,    0,  149,    0,    0,
  149,    0,    0,    0,    0,    0,    0,    0,  178,    0,
    0,    0,    0,    0,  149,  149,    0,  149,    0,    0,
    0,  140,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,   48,   48,   48,
   48,  150,    0,    0,    0,    0,  140,    0,  140,  140,
  140,  140,  140,  140,  140,  140,  140,  140,  140,  140,
  140,  140,  140,  140,  140,  140,  140,  140,  140,  140,
  140,  140,    0,    0,    0,    0,    0,   50,   50,  149,
    0,  178,    0,    0,    0,  140,    0,    0,    0,   77,
   48,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,   51,    0,   52,   51,    0,   52,    0,   77,
    0,   77,   77,   77,    0,    0,   77,    0,    0,   51,
   51,   52,   52,    0,   51,    0,   52,    0,   50,    0,
    0,    0,    0,    0,  114,    0,    0,    0,   77,    0,
    0,    0,    0,  183,  277,   44,    0,    0,    0,    0,
    0,    0,    0,    0,   51,   51,   52,   52,    0,  114,
    0,  114,  114,  114,  114,  114,  114,  114,  114,  114,
  114,  114,  114,  114,  114,  114,  114,  114,  114,  114,
  114,  114,  114,  114,  114,   51,   51,   52,   52,  252,
    0,    0,    0,    0,  184,    0,    0,    0,  114,   77,
  150,    0,  150,  150,  150,  150,  150,  150,  150,  150,
  150,  150,  150,  150,  150,  150,  150,  150,  150,  150,
  150,  150,  150,  150,  150,  150,    0,   77,    0,   77,
    0,    0,    0,    0,    0,    0,    0,    0,  149,  150,
  149,  149,  149,  149,  149,  149,  149,  149,  149,  149,
  149,  149,  149,  149,  149,  149,  149,  149,  149,  149,
  149,  149,  149,  149,   53,    0,   54,   53,    0,   54,
    0,    0,   56,    0,    0,   56,    0,  149,    0,    0,
  199,   53,   53,   54,   54,    0,   53,    0,   54,   56,
   56,    0,   58,    0,   56,   58,    0,    0,    0,  326,
    0,  328,    0,    0,    0,    0,    0,    0,    0,   58,
   58,    0,    0,    0,   58,    0,   53,  258,   54,    0,
    0,    0,    0,    0,   56,    0,    0,    0,    0,    0,
    0,   51,   51,   52,   52,    0,    0,    0,    0,    0,
    0,    0,    0,    0,   58,    0,    0,   53,   53,   54,
   54,    0,  111,    0,    0,    0,   56,  106,    0,  104,
   42,  143,  108,    0,  109,    0,    0,    0,    0,  199,
    0,  199,    0,    0,    0,    0,   58,    0,  144,    0,
  368,    0,   51,  301,   52,    1,  353,    2,    3,    4,
    5,    6,    7,    8,    9,   10,   11,   12,   13,   14,
   15,   16,   17,   18,   19,   20,   21,   22,   23,   24,
   25,  294,  277,   44,    0,    0,    0,  322,    0,    0,
    0,    0,  387,  388,  389,  329,  330,  331,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,  400,  110,  402,    0,    0,    0,
    0,  405,    0,    0,  407,    0,  408,    0,  111,    0,
    0,    0,  184,  106,    0,  104,  111,  107,  108,    0,
  109,  106,    0,  104,  111,  244,  108,    0,  109,  106,
    0,  104,    0,  143,  108,    0,  109,    0,    0,    0,
    0,    0,    0,   53,   53,   54,   54,    0,    0,    0,
    0,   56,   56,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,  105,    0,
    0,   67,   58,    0,    0,    0,  243,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,   53,    0,   54,    0,  390,  392,
  394,  110,   56,    0,    0,    0,    0,    0,    0,  110,
    0,    0,    0,    0,    0,    0,    0,  110,    0,    0,
    0,    0,   58,    0,    0,    0,   97,   98,   99,  100,
    0,  101,  102,   66,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    1,    0,    2,    3,    4,    5,    6,    7,    8,
    9,   10,   11,   12,   13,   14,   15,   16,   17,   18,
   19,   20,   21,   22,   23,   24,   25,    1,    0,    2,
    3,    4,    5,    6,    7,    8,    9,   10,   11,   12,
   13,   14,   15,   16,   17,   18,   19,   20,   21,   22,
   23,   24,   25,    1,    0,    2,    3,    4,    5,    6,
    7,    8,    9,   10,   11,   12,   13,   14,   15,   16,
   17,   18,   19,   20,   21,   22,   23,   24,   25,    0,
    0,    0,   97,   98,   99,  100,    0,  101,  102,    0,
   97,   98,   99,  100,    0,  101,  102,    0,   97,   98,
   99,  100,    0,  101,  102,    0,    0,    0,    0,    0,
    0,  103,    0,    0,    0,    8,    0,    0,    0,  242,
    0,    0,    0,    8,   17,   18,    0,    0,    0,    0,
    0,    8,   17,   18,    0,    0,    0,    0,    0,    0,
   17,   18,    1,    0,    2,    3,    4,    5,    6,    7,
    8,    9,   10,   11,   12,   13,   14,   15,   16,   17,
   18,   19,   20,   21,   22,   23,   24,   25,    1,    1,
    0,    1,    0,    1,    1,    1,    1,    1,    1,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    1,    1,    1,    1,    1,   29,   29,    0,    0,   29,
   29,   29,   29,   29,    0,   29,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,   29,   29,   29,  111,
   29,   29,    1,    0,  106,    1,  104,    0,  143,  108,
  111,  109,  264,    0,    0,  106,    0,  104,    0,  143,
  108,    0,  109,  264,    0,    0,    0,    0,    0,  111,
    0,   29,   29,    0,  106,    1,  104,    0,  143,  108,
  111,  109,  264,    0,    0,  106,    0,  104,    0,  143,
  108,    0,  109,    0,    0,    0,    0,  263,    0,    0,
  111,    0,   29,   29,    0,  106,    0,  104,  263,  143,
  108,  111,  109,    0,    0,    0,  106,    0,  104,    0,
  281,  108,    0,  109,    0,    0,  257,  263,    0,  157,
    0,  376,  110,    0,    0,    0,    0,    0,    0,    0,
  157,  111,  404,  110,    0,    0,  106,    0,  104,  298,
  143,  108,    0,  109,    0,    0,    0,    0,    0,  157,
    0,    0,  110,    0,    0,    0,    0,    0,    0,  111,
  157,  280,    0,  110,  106,    0,  104,  111,  143,  108,
    0,  109,  106,    0,  104,  111,  356,  108,    0,  109,
  106,    0,  104,  110,  143,  108,    0,  109,  111,    0,
    0,    0,    0,  106,  110,  104,  391,  143,  108,    0,
  109,  144,    1,    1,    1,    1,    1,    1,    1,    1,
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    1,    1,    1,    0,  110,    0,    0,  355,    0,    0,
    0,    0,   29,   29,   29,   29,   29,   29,   29,   29,
    0,    0,    0,    0,    0,    0,    0,    0,    0,  361,
    0,    0,  110,   97,   98,   99,  100,    0,  101,  102,
  110,    0,    0,    0,   97,   98,   99,  100,  110,  101,
  102,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,  110,    0,   97,   98,   99,  100,    0,  101,  102,
    0,    0,    0,    0,   97,   98,   99,  100,  164,  101,
  102,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,   97,   98,   99,  100,    0,  101,
  102,    0,    0,    0,    0,   97,   98,   99,  100,  111,
  101,  102,    0,    0,  106,    0,  104,  393,  143,  108,
  111,  109,    0,    0,    0,  106,  168,  104,    0,  143,
  108,    0,  109,    0,    0,   97,   98,   99,  100,  111,
  101,  102,    0,    0,  106,    0,  193,  111,  143,  108,
    0,  109,  106,    0,  195,    0,  143,  108,    0,  109,
    0,    0,    0,   97,   98,   99,  100,    0,  101,  102,
    0,   97,   98,   99,  100,    0,  101,  102,    0,   97,
   98,   99,  100,    0,  101,  102,    0,    0,    0,    0,
    0,    0,   97,   98,   99,  100,   24,  101,  102,    0,
    0,   24,  110,   24,    0,   24,   24,    0,   24,    0,
    0,    0,    0,  110,    0,    0,    0,    0,  270,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,  110,    0,    0,    1,    0,    0,    0,    0,
  110,    0,    0,    8,    9,   10,   11,   12,   13,   14,
   15,   16,   17,   18,   19,   20,   21,   22,   23,   24,
   25,    0,    0,    0,    0,    0,    0,    0,   66,    0,
    0,    0,    0,    0,   76,    0,    0,    0,    0,    0,
    0,    0,    0,    1,    0,    0,    0,    0,    0,   24,
    0,    8,    9,   10,   11,   12,   13,   14,   15,   16,
   17,   18,   19,   20,   21,   22,   23,   24,   25,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,   76,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   97,   98,   99,  100,    0,  101,  102,
    0,    0,    0,    0,   97,   98,   99,  100,    0,  101,
  102,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   97,   98,   99,  100,    0,  101,  102,
    0,   97,   98,   99,  100,    1,  101,  102,    0,    0,
    0,    0,    0,    8,    9,   10,   11,   12,   13,   14,
   15,   16,   17,   18,   19,   20,   21,   22,   23,   24,
   25,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,   76,    0,    0,    0,    0,    0,
   24,   24,   24,   24,    0,   24,   24,    1,    0,    2,
    3,    4,    5,    6,    7,    8,    9,   10,   11,   12,
   13,   14,   15,   16,   17,   18,   19,   20,   21,   22,
   23,   24,   25,   61,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,   78,    0,    0,    0,    0,    0,
    0,    0,   88,    0,   61,    0,    0,    0,    0,    0,
    0,    0,    0,    0,   78,    1,   78,   78,   78,    0,
    0,   78,    0,    8,    9,   10,   11,   12,   13,   14,
   15,   16,   17,   18,   19,   20,   21,   22,   23,   24,
   25,    0,   61,   78,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,   76,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    1,   88,    2,
    3,    4,    5,    6,    7,    8,    9,   10,   11,   12,
   13,   14,   15,   16,   17,   18,   19,   20,   21,   22,
   23,   24,   25,  287,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    1,   78,    2,    3,    4,    5,    6,
    7,    8,    9,   10,   11,   12,   13,   14,   15,   16,
   17,   18,   19,   20,   21,   22,   23,   24,   25,    0,
    0,    0,   78,    0,   78,    0,    0,   88,
};
const short yycheck[] = {                                      65,
   67,   67,    0,   58,   42,   40,   38,   64,   84,   41,
   63,   92,   44,   40,  172,   42,   50,  253,   47,   47,
   44,   86,  123,   44,  123,  186,   58,   59,   26,   27,
   40,   63,   30,   31,   32,   40,   44,   66,   40,   63,
   42,   46,   71,   71,   38,   44,  125,   41,  125,   79,
   44,   40,   44,   42,  274,  131,   58,   44,  257,  341,
   59,   93,   94,  129,   58,   59,   64,  123,   92,   63,
   40,   41,   42,   40,   44,   33,   40,   43,   42,   45,
   38,   91,   40,  116,   42,   43,   91,   45,   44,   59,
   61,  157,  124,  125,  170,   59,   33,  333,  334,   93,
   94,   38,   91,   40,  125,   42,   43,   60,   45,   62,
   44,   41,  177,  271,   44,  397,  274,  125,  184,   40,
  201,   91,   59,  123,   91,   59,  155,  347,   58,   59,
  124,  125,  198,  125,  295,  165,  264,  265,  125,   61,
  206,   33,  193,   40,  195,   42,   38,   40,   40,   42,
   42,   43,  186,   45,   38,  221,  257,   41,  257,  183,
   44,   58,   59,   93,   40,   58,   42,   59,  126,  125,
   91,   44,  290,   41,   58,   59,  242,  201,  257,   63,
  257,  299,  300,   44,   41,  183,  123,  263,  346,  126,
  223,  224,  225,  259,  192,  125,  272,   40,   59,   44,
  267,  267,   37,   41,   93,   65,   44,   42,   41,   93,
   94,   44,   47,   40,   41,   91,   33,   44,  271,  285,
   93,   38,  257,   40,  253,   42,   43,  284,   45,   38,
  257,  123,   41,  125,  126,   44,  268,  269,  270,  271,
  124,  125,   59,  103,   44,  268,  269,  257,   91,   58,
   59,   60,  290,   62,   63,  257,  261,  262,  263,   59,
  293,  299,  300,   93,   91,   94,  321,   44,  257,   41,
  294,   38,   44,   46,  341,  341,  270,  271,   40,   41,
   42,   58,   44,  124,   93,   94,  284,  257,   61,  321,
  366,   41,   44,  257,  270,  361,  294,   59,  364,  257,
  258,  259,  260,   58,  262,  263,  123,   59,  125,  126,
   58,  378,  378,  266,  267,  124,  125,   40,   91,  321,
  257,  258,  259,  260,  282,  262,  263,  321,   40,   91,
  397,  397,  290,  291,  292,  293,  294,  295,  296,  297,
  298,  299,  300,  301,  302,  303,  304,  305,  306,  307,
  272,  273,  274,  275,  276,  277,  278,  279,  280,  281,
  257,  226,  227,  321,  257,  257,  258,  259,  260,   40,
  262,  263,  309,  310,  311,   40,  313,  314,  315,  316,
  317,  318,  319,  320,  268,  269,  270,  271,  228,  229,
  282,  321,  284,  285,  286,  287,  288,  289,  290,  291,
  292,  293,  294,  295,  296,  297,  298,  299,  300,  301,
  302,  303,  304,  305,  306,  307,   44,  309,  310,  311,
   44,  313,  314,  315,  316,  317,  318,  319,  320,   44,
  257,   59,  257,   41,   59,   59,   44,  321,  234,  235,
  257,  258,  259,  260,   59,  262,  263,  230,  231,  232,
  233,   41,  131,   59,   44,  264,  265,  266,  267,  268,
  269,  270,  271,   41,   61,  282,   44,  284,  285,  286,
  287,  288,  289,  290,  291,  292,  293,  294,  295,  296,
  297,  298,  299,  300,  301,  302,  303,  304,  305,  306,
  307,  170,  309,  310,  311,  257,  313,  314,  315,  316,
  317,  318,  319,  320,   33,   41,  257,  257,   44,   38,
   41,   40,  321,   42,   43,   41,   45,   41,   44,   41,
   44,  257,   44,   40,   41,   41,   41,   44,   44,   44,
   59,  257,  282,   93,  284,  285,  286,  287,  288,  289,
  290,  291,  292,  293,  294,  295,  296,  297,  298,  299,
  300,  301,  302,  303,  304,  305,  306,  307,   41,   93,
   58,   44,   40,   41,   42,   37,   38,  314,   59,   41,
   42,   43,   44,   45,   91,   47,  257,  321,   41,   41,
   58,   59,   93,   93,  263,   41,   58,   59,   60,   61,
   62,   63,   41,  272,  123,   40,  125,  126,   93,   40,
   41,   42,   37,   38,   93,   93,   41,   42,   43,   44,
   45,   41,   47,   91,   93,  123,   93,   58,   59,  312,
   59,   93,   94,   58,   59,   60,   61,   62,   63,   41,
   40,   41,   42,   41,   44,   41,   72,  361,  236,  238,
   38,  237,   75,   41,  239,   43,   44,   45,  240,   59,
   91,   56,  124,  125,   41,  192,  268,   44,   93,   94,
   58,   59,   60,   38,   62,   63,   41,   26,   43,   44,
   45,   58,   59,  155,   -1,   -1,   63,   -1,   -1,   -1,
   -1,   91,   -1,   58,   59,   60,   -1,   62,   63,  124,
  125,   40,   41,   42,   -1,   93,   94,   -1,   -1,   41,
   -1,   -1,   44,   -1,   -1,   -1,   93,   -1,   -1,   58,
   59,   -1,   -1,   -1,   -1,   -1,   58,   59,   93,   94,
   -1,   63,   -1,   -1,   -1,   -1,  124,  125,  257,  258,
  259,  260,   -1,  262,  263,   -1,   -1,   -1,  125,   -1,
  257,   -1,   91,   -1,   -1,   -1,   -1,   -1,   -1,  124,
  125,   93,   -1,  282,   -1,  284,  285,  286,  287,  288,
  289,  290,  291,  292,  293,  294,  295,  296,  297,  298,
  299,  300,  301,  302,  303,  304,  305,  306,  307,  257,
  309,  310,  311,  125,  313,  314,  315,  316,  317,  318,
  319,  320,  264,  265,  266,  267,  268,  269,  270,  271,
  272,  273,  274,  275,  276,  277,  278,  279,  280,  281,
   -1,   -1,   -1,   -1,   -1,   -1,  257,   -1,   -1,   -1,
   -1,   77,   78,   -1,   -1,   -1,   82,   -1,   -1,  264,
  265,  266,  267,  268,  269,  270,  271,  272,  273,  274,
  275,  276,  277,  278,  279,  280,  281,  257,  104,  321,
   -1,   -1,   -1,   -1,   38,   -1,   -1,   41,   -1,   43,
   44,   45,   -1,   -1,   -1,   -1,  264,  265,  266,  267,
  268,  269,  270,  271,   58,   59,   60,   38,   62,   63,
   41,   -1,   -1,   44,  271,   -1,  321,   -1,   -1,  264,
  265,  266,  267,  268,  269,  270,  271,   58,   59,   60,
   38,   62,   63,   41,   -1,   -1,   44,   -1,  257,   93,
   94,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   58,   59,   60,  321,   62,   63,   -1,   -1,  270,  271,
   -1,   -1,   93,   94,  321,   -1,   -1,  193,   -1,  195,
  124,  125,   -1,   -1,   -1,   38,  321,   -1,   41,   -1,
   -1,   44,   -1,   -1,   -1,   93,   94,   -1,   -1,   -1,
   -1,   -1,   -1,  124,  125,   58,   59,   60,   38,   62,
   63,   41,   -1,   -1,   44,   -1,   40,   41,   42,  321,
   44,   -1,   -1,   -1,   -1,   -1,  124,  125,   58,   59,
   60,   38,   62,   63,   41,   59,   -1,   44,   -1,   -1,
   93,   94,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   58,   59,   60,   38,   62,   63,   41,   -1,   -1,
   44,   -1,   -1,   93,   94,   -1,   -1,   91,   -1,   -1,
   -1,  124,  125,   -1,   58,   59,   60,   38,   62,   63,
   41,   -1,   -1,   44,   -1,   -1,   93,   94,   -1,   -1,
   -1,   -1,   -1,   -1,  124,  125,   -1,   58,   59,   60,
   -1,   62,   63,   -1,   -1,   -1,   -1,   -1,   -1,   93,
   94,   -1,   -1,   -1,   28,   -1,   -1,  124,  125,   -1,
  264,  265,  266,  267,  268,  269,  270,  271,   -1,   43,
   -1,   -1,   93,   94,   -1,   -1,   -1,   -1,   -1,   -1,
  124,  125,   -1,  264,  265,  266,  267,  268,  269,  270,
  271,   -1,   -1,   -1,   68,   -1,   -1,   -1,   72,   -1,
   -1,   -1,   -1,  124,  125,   -1,  264,  265,  266,  267,
  268,  269,  270,  271,   -1,   -1,   -1,  321,   92,   84,
   -1,   -1,   -1,   -1,   40,   41,   42,   38,   44,   -1,
   41,   -1,   -1,   44,   -1,  100,  101,  102,   -1,   -1,
  321,   -1,   58,   59,   -1,   -1,   -1,   58,   59,   -1,
   -1,  116,   63,  266,  267,  268,  269,  270,  271,   -1,
   -1,   -1,   -1,  321,   -1,   38,  131,   -1,   41,   -1,
   -1,   44,   -1,  257,   -1,   91,  266,  267,  268,  269,
  270,  271,   93,   94,   -1,   58,   59,   -1,   -1,   -1,
   63,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  266,
  267,  268,  269,  270,  271,  170,   -1,   -1,  321,  183,
   -1,   -1,   -1,  124,  125,   -1,   -1,   -1,   -1,   -1,
   93,   94,  266,  267,  268,  269,  270,  271,   -1,   -1,
   -1,  321,   -1,   -1,   -1,   -1,   -1,   40,   41,   42,
   -1,   44,   -1,   -1,   -1,  266,  267,  268,  269,  270,
  271,  124,  125,   -1,  321,   58,   59,   -1,  223,  224,
  225,  226,  227,  228,  229,  230,  231,  232,  233,  234,
  235,  236,  237,  238,  239,  240,   -1,  321,   -1,   41,
   -1,   -1,   44,   -1,   -1,   -1,   -1,   -1,   91,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   58,   59,  263,   61,
  321,   -1,   -1,   -1,   -1,   -1,   -1,  272,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   41,   -1,   -1,
   44,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  293,   -1,
   -1,   -1,   -1,   -1,   58,   59,   -1,   61,   -1,   -1,
   -1,  257,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,  268,  269,  270,
  271,  123,   -1,   -1,   -1,   -1,  282,   -1,  284,  285,
  286,  287,  288,  289,  290,  291,  292,  293,  294,  295,
  296,  297,  298,  299,  300,  301,  302,  303,  304,  305,
  306,  307,   -1,   -1,   -1,   -1,   -1,  270,  271,  123,
   -1,  366,   -1,   -1,   -1,  321,   -1,   -1,   -1,   55,
  321,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   41,   -1,   41,   44,   -1,   44,   -1,   75,
   -1,   77,   78,   79,   -1,   -1,   82,   -1,   -1,   58,
   59,   58,   59,   -1,   63,   -1,   63,   -1,  321,   -1,
   -1,   -1,   -1,   -1,  257,   -1,   -1,   -1,  104,   -1,
   -1,   -1,   -1,   40,   41,   42,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   93,   94,   93,   94,   -1,  282,
   -1,  284,  285,  286,  287,  288,  289,  290,  291,  292,
  293,  294,  295,  296,  297,  298,  299,  300,  301,  302,
  303,  304,  305,  306,  307,  124,  125,  124,  125,  136,
   -1,   -1,   -1,   -1,   91,   -1,   -1,   -1,  321,  165,
  282,   -1,  284,  285,  286,  287,  288,  289,  290,  291,
  292,  293,  294,  295,  296,  297,  298,  299,  300,  301,
  302,  303,  304,  305,  306,  307,   -1,  193,   -1,  195,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  282,  321,
  284,  285,  286,  287,  288,  289,  290,  291,  292,  293,
  294,  295,  296,  297,  298,  299,  300,  301,  302,  303,
  304,  305,  306,  307,   41,   -1,   41,   44,   -1,   44,
   -1,   -1,   41,   -1,   -1,   44,   -1,  321,   -1,   -1,
  104,   58,   59,   58,   59,   -1,   63,   -1,   63,   58,
   59,   -1,   41,   -1,   63,   44,   -1,   -1,   -1,  246,
   -1,  248,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   58,
   59,   -1,   -1,   -1,   63,   -1,   93,  141,   93,   -1,
   -1,   -1,   -1,   -1,   93,   -1,   -1,   -1,   -1,   -1,
   -1,  270,  271,  270,  271,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   93,   -1,   -1,  124,  125,  124,
  125,   -1,   33,   -1,   -1,   -1,  125,   38,   -1,   40,
  257,   42,   43,   -1,   45,   -1,   -1,   -1,   -1,  193,
   -1,  195,   -1,   -1,   -1,   -1,  125,   -1,   59,   -1,
  327,   -1,  321,  207,  321,  282,   41,  284,  285,  286,
  287,  288,  289,  290,  291,  292,  293,  294,  295,  296,
  297,  298,  299,  300,  301,  302,  303,  304,  305,  306,
  307,   40,   41,   42,   -1,   -1,   -1,  241,   -1,   -1,
   -1,   -1,  369,  370,  371,  249,  250,  251,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,  391,  126,  393,   -1,   -1,   -1,
   -1,  398,   -1,   -1,  401,   -1,  403,   -1,   33,   -1,
   -1,   -1,   91,   38,   -1,   40,   33,   42,   43,   -1,
   45,   38,   -1,   40,   33,   42,   43,   -1,   45,   38,
   -1,   40,   -1,   42,   43,   -1,   45,   -1,   -1,   -1,
   -1,   -1,   -1,  270,  271,  270,  271,   -1,   -1,   -1,
   -1,  270,  271,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   93,   -1,
   -1,   61,  271,   -1,   -1,   -1,   93,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,  321,   -1,  321,   -1,  372,  373,
  374,  126,  321,   -1,   -1,   -1,   -1,   -1,   -1,  126,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,  126,   -1,   -1,
   -1,   -1,  321,   -1,   -1,   -1,  257,  258,  259,  260,
   -1,  262,  263,  123,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,  282,   -1,  284,  285,  286,  287,  288,  289,  290,
  291,  292,  293,  294,  295,  296,  297,  298,  299,  300,
  301,  302,  303,  304,  305,  306,  307,  282,   -1,  284,
  285,  286,  287,  288,  289,  290,  291,  292,  293,  294,
  295,  296,  297,  298,  299,  300,  301,  302,  303,  304,
  305,  306,  307,  282,   -1,  284,  285,  286,  287,  288,
  289,  290,  291,  292,  293,  294,  295,  296,  297,  298,
  299,  300,  301,  302,  303,  304,  305,  306,  307,   -1,
   -1,   -1,  257,  258,  259,  260,   -1,  262,  263,   -1,
  257,  258,  259,  260,   -1,  262,  263,   -1,  257,  258,
  259,  260,   -1,  262,  263,   -1,   -1,   -1,   -1,   -1,
   -1,  286,   -1,   -1,   -1,  290,   -1,   -1,   -1,  286,
   -1,   -1,   -1,  290,  299,  300,   -1,   -1,   -1,   -1,
   -1,  290,  299,  300,   -1,   -1,   -1,   -1,   -1,   -1,
  299,  300,  282,   -1,  284,  285,  286,  287,  288,  289,
  290,  291,  292,  293,  294,  295,  296,  297,  298,  299,
  300,  301,  302,  303,  304,  305,  306,  307,   37,   38,
   -1,   40,   -1,   42,   43,   44,   45,   46,   47,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   59,   60,   61,   62,   63,   37,   38,   -1,   -1,   41,
   42,   43,   44,   45,   -1,   47,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   58,   59,   60,   33,
   62,   63,   91,   -1,   38,   94,   40,   -1,   42,   43,
   33,   45,   46,   -1,   -1,   38,   -1,   40,   -1,   42,
   43,   -1,   45,   46,   -1,   -1,   -1,   -1,   -1,   33,
   -1,   93,   94,   -1,   38,  124,   40,   -1,   42,   43,
   33,   45,   46,   -1,   -1,   38,   -1,   40,   -1,   42,
   43,   -1,   45,   -1,   -1,   -1,   -1,   91,   -1,   -1,
   33,   -1,  124,  125,   -1,   38,   -1,   40,   91,   42,
   43,   33,   45,   -1,   -1,   -1,   38,   -1,   40,   -1,
   42,   43,   -1,   45,   -1,   -1,   59,   91,   -1,  123,
   -1,  125,  126,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  123,   33,  125,  126,   -1,   -1,   38,   -1,   40,   41,
   42,   43,   -1,   45,   -1,   -1,   -1,   -1,   -1,  123,
   -1,   -1,  126,   -1,   -1,   -1,   -1,   -1,   -1,   33,
  123,   93,   -1,  126,   38,   -1,   40,   33,   42,   43,
   -1,   45,   38,   -1,   40,   33,   42,   43,   -1,   45,
   38,   -1,   40,  126,   42,   43,   -1,   45,   33,   -1,
   -1,   -1,   -1,   38,  126,   40,   41,   42,   43,   -1,
   45,   59,  261,  262,  263,  264,  265,  266,  267,  268,
  269,  270,  271,  272,  273,  274,  275,  276,  277,  278,
  279,  280,  281,   -1,  126,   -1,   -1,   93,   -1,   -1,
   -1,   -1,  264,  265,  266,  267,  268,  269,  270,  271,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  123,
   -1,   -1,  126,  257,  258,  259,  260,   -1,  262,  263,
  126,   -1,   -1,   -1,  257,  258,  259,  260,  126,  262,
  263,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,  126,   -1,  257,  258,  259,  260,   -1,  262,  263,
   -1,   -1,   -1,   -1,  257,  258,  259,  260,  125,  262,
  263,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,  257,  258,  259,  260,   -1,  262,
  263,   -1,   -1,   -1,   -1,  257,  258,  259,  260,   33,
  262,  263,   -1,   -1,   38,   -1,   40,   41,   42,   43,
   33,   45,   -1,   -1,   -1,   38,  125,   40,   -1,   42,
   43,   -1,   45,   -1,   -1,  257,  258,  259,  260,   33,
  262,  263,   -1,   -1,   38,   -1,   40,   33,   42,   43,
   -1,   45,   38,   -1,   40,   -1,   42,   43,   -1,   45,
   -1,   -1,   -1,  257,  258,  259,  260,   -1,  262,  263,
   -1,  257,  258,  259,  260,   -1,  262,  263,   -1,  257,
  258,  259,  260,   -1,  262,  263,   -1,   -1,   -1,   -1,
   -1,   -1,  257,  258,  259,  260,   33,  262,  263,   -1,
   -1,   38,  126,   40,   -1,   42,   43,   -1,   45,   -1,
   -1,   -1,   -1,  126,   -1,   -1,   -1,   -1,  125,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,  126,   -1,   -1,  282,   -1,   -1,   -1,   -1,
  126,   -1,   -1,  290,  291,  292,  293,  294,  295,  296,
  297,  298,  299,  300,  301,  302,  303,  304,  305,  306,
  307,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  123,   -1,
   -1,   -1,   -1,   -1,  321,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  282,   -1,   -1,   -1,   -1,   -1,  126,
   -1,  290,  291,  292,  293,  294,  295,  296,  297,  298,
  299,  300,  301,  302,  303,  304,  305,  306,  307,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,  321,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  257,  258,  259,  260,   -1,  262,  263,
   -1,   -1,   -1,   -1,  257,  258,  259,  260,   -1,  262,
  263,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  257,  258,  259,  260,   -1,  262,  263,
   -1,  257,  258,  259,  260,  282,  262,  263,   -1,   -1,
   -1,   -1,   -1,  290,  291,  292,  293,  294,  295,  296,
  297,  298,  299,  300,  301,  302,  303,  304,  305,  306,
  307,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,  321,   -1,   -1,   -1,   -1,   -1,
  257,  258,  259,  260,   -1,  262,  263,  282,   -1,  284,
  285,  286,  287,  288,  289,  290,  291,  292,  293,  294,
  295,  296,  297,  298,  299,  300,  301,  302,  303,  304,
  305,  306,  307,   44,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   55,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   63,   -1,   65,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   75,  282,   77,   78,   79,   -1,
   -1,   82,   -1,  290,  291,  292,  293,  294,  295,  296,
  297,  298,  299,  300,  301,  302,  303,  304,  305,  306,
  307,   -1,  103,  104,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,  321,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,  282,  129,  284,
  285,  286,  287,  288,  289,  290,  291,  292,  293,  294,
  295,  296,  297,  298,  299,  300,  301,  302,  303,  304,
  305,  306,  307,  308,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  282,  165,  284,  285,  286,  287,  288,
  289,  290,  291,  292,  293,  294,  295,  296,  297,  298,
  299,  300,  301,  302,  303,  304,  305,  306,  307,   -1,
   -1,   -1,  193,   -1,  195,   -1,   -1,  198,
};
#define YYFINAL 26
#ifndef YYDEBUG
#define YYDEBUG 0
#endif
#define YYMAXTOKEN 321
#if YYDEBUG
const char * const yyname[] = {
"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
"'!'",0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'","','","'-'","'.'","'/'",0,0,0,
0,0,0,0,0,0,0,"':'","';'","'<'","'='","'>'","'?'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,"'['",0,"']'","'^'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,"'{'","'|'","'}'","'~'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"IDENTIFIER",
"STRING_LITERAL","CONSTANT","SIZEOF","PTR_OP","INC_OP","DEC_OP","LEFT_OP",
"RIGHT_OP","LE_OP","GE_OP","EQ_OP","NE_OP","AND_OP","OR_OP","MUL_ASSIGN",
"DIV_ASSIGN","MOD_ASSIGN","ADD_ASSIGN","SUB_ASSIGN","LEFT_ASSIGN",
"RIGHT_ASSIGN","AND_ASSIGN","XOR_ASSIGN","OR_ASSIGN","TYPE_NAME","ANY_WORD",
"TYPEDEF","EXTERN","STATIC","AUTO","REGISTER","INLINE","RESTRICT","CHAR",
"SHORT","INT","LONG","SIGNED","UNSIGNED","FLOAT","DOUBLE","CONST","VOLATILE",
"VOID","BOOL","COMPLEX","IMAGINARY","STRUCT","UNION","ENUM","ELLIPSIS","CASE",
"DEFAULT","IF","ELSE","SWITCH","WHILE","DO","FOR","GOTO","CONTINUE","BREAK",
"RETURN","ATTRIBUTE",
};
const char * const yyrule[] = {
"$accept : translation_unit",
"primary_expression : IDENTIFIER",
"primary_expression : CONSTANT",
"primary_expression : STRING_LITERAL",
"primary_expression : '(' expression ')'",
"postfix_expression : primary_expression",
"postfix_expression : postfix_expression '[' expression ']'",
"postfix_expression : postfix_expression '(' ')'",
"postfix_expression : postfix_expression '(' argument_expression_list ')'",
"postfix_expression : postfix_expression '.' IDENTIFIER",
"postfix_expression : postfix_expression PTR_OP IDENTIFIER",
"postfix_expression : postfix_expression INC_OP",
"postfix_expression : postfix_expression DEC_OP",
"postfix_expression : '(' type_name ')' '{' initializer_list '}'",
"postfix_expression : '(' type_name ')' '{' initializer_list ',' '}'",
"argument_expression_list : assignment_expression",
"argument_expression_list : argument_expression_list ',' assignment_expression",
"unary_expression : postfix_expression",
"unary_expression : INC_OP unary_expression",
"unary_expression : DEC_OP unary_expression",
"unary_expression : unary_operator cast_expression",
"unary_expression : SIZEOF unary_expression",
"unary_expression : SIZEOF '(' type_name ')'",
"unary_operator : '&'",
"unary_operator : '*'",
"unary_operator : '+'",
"unary_operator : '-'",
"unary_operator : '~'",
"unary_operator : '!'",
"cast_expression : unary_expression",
"cast_expression : '(' type_name ')' cast_expression",
"multiplicative_expression : cast_expression",
"multiplicative_expression : multiplicative_expression '*' cast_expression",
"multiplicative_expression : multiplicative_expression '/' cast_expression",
"multiplicative_expression : multiplicative_expression '%' cast_expression",
"additive_expression : multiplicative_expression",
"additive_expression : additive_expression '+' multiplicative_expression",
"additive_expression : additive_expression '-' multiplicative_expression",
"shift_expression : additive_expression",
"shift_expression : shift_expression LEFT_OP additive_expression",
"shift_expression : shift_expression RIGHT_OP additive_expression",
"relational_expression : shift_expression",
"relational_expression : relational_expression '<' shift_expression",
"relational_expression : relational_expression '>' shift_expression",
"relational_expression : relational_expression LE_OP shift_expression",
"relational_expression : relational_expression GE_OP shift_expression",
"equality_expression : relational_expression",
"equality_expression : equality_expression EQ_OP relational_expression",
"equality_expression : equality_expression NE_OP relational_expression",
"and_expression : equality_expression",
"and_expression : and_expression '&' equality_expression",
"exclusive_or_expression : and_expression",
"exclusive_or_expression : exclusive_or_expression '^' and_expression",
"inclusive_or_expression : exclusive_or_expression",
"inclusive_or_expression : inclusive_or_expression '|' exclusive_or_expression",
"logical_and_expression : inclusive_or_expression",
"logical_and_expression : logical_and_expression AND_OP inclusive_or_expression",
"logical_or_expression : logical_and_expression",
"logical_or_expression : logical_or_expression OR_OP logical_and_expression",
"conditional_expression : logical_or_expression",
"conditional_expression : logical_or_expression '?' expression ':' conditional_expression",
"assignment_expression : conditional_expression",
"assignment_expression : unary_expression assignment_operator assignment_expression",
"assignment_operator : '='",
"assignment_operator : MUL_ASSIGN",
"assignment_operator : DIV_ASSIGN",
"assignment_operator : MOD_ASSIGN",
"assignment_operator : ADD_ASSIGN",
"assignment_operator : SUB_ASSIGN",
"assignment_operator : LEFT_ASSIGN",
"assignment_operator : RIGHT_ASSIGN",
"assignment_operator : AND_ASSIGN",
"assignment_operator : XOR_ASSIGN",
"assignment_operator : OR_ASSIGN",
"expression : assignment_expression",
"expression : expression ',' assignment_expression",
"constant_expression : conditional_expression",
"declaration : declaration_specifiers ';'",
"declaration : declaration_specifiers init_declarator_list ';'",
"declaration_specifiers : storage_class_specifier",
"declaration_specifiers : storage_class_specifier declaration_specifiers",
"declaration_specifiers : type_specifier",
"declaration_specifiers : type_specifier declaration_specifiers",
"declaration_specifiers : type_qualifier",
"declaration_specifiers : type_qualifier declaration_specifiers",
"declaration_specifiers : function_specifier",
"declaration_specifiers : function_specifier declaration_specifiers",
"init_declarator_list : init_declarator",
"init_declarator_list : init_declarator_list ',' init_declarator",
"init_declarator : declarator",
"init_declarator : declarator '=' initializer",
"storage_class_specifier : TYPEDEF",
"storage_class_specifier : EXTERN",
"storage_class_specifier : STATIC",
"storage_class_specifier : AUTO",
"storage_class_specifier : REGISTER",
"type_specifier : VOID",
"type_specifier : CHAR",
"type_specifier : SHORT",
"type_specifier : INT",
"type_specifier : LONG",
"type_specifier : FLOAT",
"type_specifier : DOUBLE",
"type_specifier : SIGNED",
"type_specifier : UNSIGNED",
"type_specifier : BOOL",
"type_specifier : COMPLEX",
"type_specifier : IMAGINARY",
"type_specifier : struct_or_union_specifier",
"type_specifier : enum_specifier",
"type_specifier : TYPE_NAME",
"struct_or_union_specifier : struct_or_union IDENTIFIER '{' struct_declaration_list '}'",
"struct_or_union_specifier : struct_or_union IDENTIFIER '{' '}'",
"struct_or_union_specifier : struct_or_union '{' struct_declaration_list '}'",
"struct_or_union_specifier : struct_or_union IDENTIFIER",
"struct_or_union : STRUCT",
"struct_or_union : UNION",
"struct_declaration_list : struct_declaration",
"struct_declaration_list : struct_declaration_list struct_declaration",
"struct_declaration : specifier_qualifier_list struct_declarator_list ';'",
"struct_declaration : specifier_qualifier_list ';'",
"specifier_qualifier_list : type_specifier specifier_qualifier_list",
"specifier_qualifier_list : type_specifier",
"specifier_qualifier_list : type_qualifier specifier_qualifier_list",
"specifier_qualifier_list : type_qualifier",
"specifier_qualifier_list : attributes specifier_qualifier_list",
"specifier_qualifier_list : attributes",
"struct_declarator_list : struct_declarator",
"struct_declarator_list : struct_declarator_list ',' struct_declarator",
"struct_declarator_list : struct_declarator_list ',' attributes struct_declarator",
"struct_declarator : declarator",
"struct_declarator : declarator attributes",
"struct_declarator : ':' constant_expression",
"struct_declarator : ':' constant_expression attributes",
"struct_declarator : declarator ':' constant_expression",
"struct_declarator : declarator ':' constant_expression attributes",
"enum_specifier : ENUM '{' enumerator_list '}'",
"enum_specifier : ENUM IDENTIFIER '{' enumerator_list '}'",
"enum_specifier : ENUM '{' enumerator_list ',' '}'",
"enum_specifier : ENUM IDENTIFIER '{' enumerator_list ',' '}'",
"enum_specifier : ENUM IDENTIFIER",
"enumerator_list : enumerator",
"enumerator_list : enumerator_list ',' enumerator",
"enumerator : IDENTIFIER",
"enumerator : IDENTIFIER '=' constant_expression",
"type_qualifier : CONST",
"type_qualifier : RESTRICT",
"type_qualifier : VOLATILE",
"function_specifier : INLINE",
"declarator : pointer direct_declarator",
"declarator : direct_declarator",
"direct_declarator : IDENTIFIER",
"direct_declarator : '(' declarator ')'",
"direct_declarator : direct_declarator '[' type_qualifier_list assignment_expression ']'",
"direct_declarator : direct_declarator '[' type_qualifier_list ']'",
"direct_declarator : direct_declarator '[' assignment_expression ']'",
"direct_declarator : direct_declarator '[' STATIC type_qualifier_list assignment_expression ']'",
"direct_declarator : direct_declarator '[' type_qualifier_list STATIC assignment_expression ']'",
"direct_declarator : direct_declarator '[' type_qualifier_list '*' ']'",
"direct_declarator : direct_declarator '[' '*' ']'",
"direct_declarator : direct_declarator '[' ']'",
"direct_declarator : direct_declarator '(' parameter_type_list ')'",
"direct_declarator : direct_declarator '(' identifier_list ')'",
"direct_declarator : direct_declarator '(' ')'",
"pointer : '*'",
"pointer : '*' type_qualifier_list",
"pointer : '*' pointer",
"pointer : '*' type_qualifier_list pointer",
"type_qualifier_list : type_qualifier",
"type_qualifier_list : type_qualifier_list type_qualifier",
"parameter_type_list : parameter_list",
"parameter_type_list : parameter_list ',' ELLIPSIS",
"parameter_list : parameter_declaration",
"parameter_list : parameter_list ',' parameter_declaration",
"parameter_declaration : declaration_specifiers declarator",
"parameter_declaration : declaration_specifiers abstract_declarator",
"parameter_declaration : declaration_specifiers",
"identifier_list : IDENTIFIER",
"identifier_list : identifier_list ',' IDENTIFIER",
"type_name : specifier_qualifier_list",
"type_name : specifier_qualifier_list abstract_declarator",
"abstract_declarator : pointer",
"abstract_declarator : direct_abstract_declarator",
"abstract_declarator : pointer direct_abstract_declarator",
"direct_abstract_declarator : '(' abstract_declarator ')'",
"direct_abstract_declarator : '[' ']'",
"direct_abstract_declarator : '[' assignment_expression ']'",
"direct_abstract_declarator : direct_abstract_declarator '[' ']'",
"direct_abstract_declarator : direct_abstract_declarator '[' assignment_expression ']'",
"direct_abstract_declarator : '[' '*' ']'",
"direct_abstract_declarator : direct_abstract_declarator '[' '*' ']'",
"direct_abstract_declarator : '(' ')'",
"direct_abstract_declarator : '(' parameter_type_list ')'",
"direct_abstract_declarator : direct_abstract_declarator '(' ')'",
"direct_abstract_declarator : direct_abstract_declarator '(' parameter_type_list ')'",
"initializer : assignment_expression",
"initializer : '{' initializer_list '}'",
"initializer : '{' initializer_list ',' '}'",
"initializer_list : initializer",
"initializer_list : designation initializer",
"initializer_list : initializer_list ',' initializer",
"initializer_list : initializer_list ',' designation initializer",
"designation : designator_list '='",
"designator_list : designator",
"designator_list : designator_list designator",
"designator : '[' constant_expression ']'",
"designator : '.' IDENTIFIER",
"statement : labeled_statement",
"statement : compound_statement",
"statement : expression_statement",
"statement : selection_statement",
"statement : iteration_statement",
"statement : jump_statement",
"labeled_statement : IDENTIFIER ':' statement",
"labeled_statement : CASE constant_expression ':' statement",
"labeled_statement : DEFAULT ':' statement",
"compound_statement : '{' '}'",
"compound_statement : '{' block_item_list '}'",
"block_item_list : block_item",
"block_item_list : block_item_list block_item",
"block_item : declaration",
"block_item : statement",
"expression_statement : ';'",
"expression_statement : expression ';'",
"selection_statement : IF '(' expression ')' statement",
"selection_statement : IF '(' expression ')' statement ELSE statement",
"selection_statement : SWITCH '(' expression ')' statement",
"iteration_statement : WHILE '(' expression ')' statement",
"iteration_statement : DO statement WHILE '(' expression ')' ';'",
"iteration_statement : FOR '(' expression_statement expression_statement ')' statement",
"iteration_statement : FOR '(' expression_statement expression_statement expression ')' statement",
"iteration_statement : FOR '(' declaration expression_statement ')' statement",
"iteration_statement : FOR '(' declaration expression_statement expression ')' statement",
"jump_statement : GOTO IDENTIFIER ';'",
"jump_statement : CONTINUE ';'",
"jump_statement : BREAK ';'",
"jump_statement : RETURN ';'",
"jump_statement : RETURN expression ';'",
"translation_unit : external_declaration",
"translation_unit : translation_unit external_declaration",
"external_declaration : function_definition",
"external_declaration : declaration",
"function_definition : declaration_specifiers declarator declaration_list compound_statement",
"function_definition : declaration_specifiers declarator compound_statement",
"declaration_list : declaration",
"declaration_list : declaration_list declaration",
"attributes : ATTRIBUTE",
};
#endif
#if YYDEBUG
#include <stdio.h>
#endif
#ifdef YYSTACKSIZE
#undef YYMAXDEPTH
#define YYMAXDEPTH YYSTACKSIZE
#else
#ifdef YYMAXDEPTH
#define YYSTACKSIZE YYMAXDEPTH
#else
#define YYSTACKSIZE 10000
#define YYMAXDEPTH 10000
#endif
#endif
#define YYINITSTACKSIZE 200
int yydebug;
int yynerrs;
int yyerrflag;
int yychar;
short *yyssp;
YYSTYPE *yyvsp;
YYSTYPE yyval;
YYSTYPE yylval;
short *yyss;
short *yysslim;
YYSTYPE *yyvs;
int yystacksize;
#line 556 "st.y"
#include <stdio.h>

extern char yytext[];
extern int column;

int yyerror(char const *s)
{
	fflush(stdout);
	printf("\n%*s\n%*s\n", column, "^", column, s);

	//g_depth = 0;
}

/* Find a symbol exist in a symbol table */
struct symtab *sym_find(struct symtab *tbl, char *s)
{
	char *p;
	struct symtab *sp;

	for(sp = tbl; sp < &tbl[NSYMS]; sp++) {
		/* is it already here? */
		if(sp->name && !strcmp(sp->name, s))
			return sp;
	}
	return NULL;
}

/*
 * Delete a symbol from symbol table
 * Return the position on success, NULL on failure.
 */
struct symtab *sym_del(struct symtab *tbl, char *s)
{
	char *p;
	struct symtab *sp;

	for(sp = tbl; sp < &tbl[NSYMS]; sp++) {
		if(sp->name && !strcmp(sp->name, s)) {
			free(sp->name);
			sp->name = NULL;
			sp->value = 0;
			sp->type = -1;
			return sp;
		}
	}
	return NULL;
}

/* look up a symbol table entry in table tbl, add if not present */
struct symtab *sym_insert(struct symtab *tbl, struct symtab *entry)
{
	char *p;
	struct symtab *sp;

	for(sp = tbl; sp < &tbl[NSYMS]; sp++) {
		/* is it already here? */
		if(sp->name && !strcmp(sp->name, entry->name))
			return sp;

		/* is it free */
		if(!sp->name) {
			memcpy(sp, entry, sizeof(struct symtab));
			return sp;
		}
		/* otherwise continue to next */
	}
	yyerror("Too many symbols");
	exit(1);	/* cannot continue */
} /* symlook */

int main(void)
{
    extern int yyparse(void);
    extern FILE *yyin;

    yyin = stdin;

    do {
	    yyparse();
    } while (!feof(yyin));
}
#line 1281 "y.tab.c"
/* allocate initial stack or double stack size, up to YYMAXDEPTH */
static int yygrowstack()
{
    int newsize, i;
    short *newss;
    YYSTYPE *newvs;

    if ((newsize = yystacksize) == 0)
        newsize = YYINITSTACKSIZE;
    else if (newsize >= YYMAXDEPTH)
        return -1;
    else if ((newsize *= 2) > YYMAXDEPTH)
        newsize = YYMAXDEPTH;
    i = yyssp - yyss;
    newss = yyss ? (short *)realloc(yyss, newsize * sizeof *newss) :
      (short *)malloc(newsize * sizeof *newss);
    if (newss == NULL)
        return -1;
    yyss = newss;
    yyssp = newss + i;
    newvs = yyvs ? (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs) :
      (YYSTYPE *)malloc(newsize * sizeof *newvs);
    if (newvs == NULL)
        return -1;
    yyvs = newvs;
    yyvsp = newvs + i;
    yystacksize = newsize;
    yysslim = yyss + newsize - 1;
    return 0;
}

#define YYABORT goto yyabort
#define YYREJECT goto yyabort
#define YYACCEPT goto yyaccept
#define YYERROR goto yyerrlab

#ifndef YYPARSE_PARAM
#if defined(__cplusplus) || __STDC__
#define YYPARSE_PARAM_ARG void
#define YYPARSE_PARAM_DECL
#else	/* ! ANSI-C/C++ */
#define YYPARSE_PARAM_ARG
#define YYPARSE_PARAM_DECL
#endif	/* ANSI-C/C++ */
#else	/* YYPARSE_PARAM */
#ifndef YYPARSE_PARAM_TYPE
#define YYPARSE_PARAM_TYPE void *
#endif
#if defined(__cplusplus) || __STDC__
#define YYPARSE_PARAM_ARG YYPARSE_PARAM_TYPE YYPARSE_PARAM
#define YYPARSE_PARAM_DECL
#else	/* ! ANSI-C/C++ */
#define YYPARSE_PARAM_ARG YYPARSE_PARAM
#define YYPARSE_PARAM_DECL YYPARSE_PARAM_TYPE YYPARSE_PARAM;
#endif	/* ANSI-C/C++ */
#endif	/* ! YYPARSE_PARAM */

int
yyparse (YYPARSE_PARAM_ARG)
    YYPARSE_PARAM_DECL
{
    register int yym, yyn, yystate;
#if YYDEBUG
    register const char *yys;

    if ((yys = getenv("YYDEBUG")))
    {
        yyn = *yys;
        if (yyn >= '0' && yyn <= '9')
            yydebug = yyn - '0';
    }
#endif

    yynerrs = 0;
    yyerrflag = 0;
    yychar = (-1);

    if (yyss == NULL && yygrowstack()) goto yyoverflow;
    yyssp = yyss;
    yyvsp = yyvs;
    *yyssp = yystate = 0;

yyloop:
    if ((yyn = yydefred[yystate])) goto yyreduce;
    if (yychar < 0)
    {
        if ((yychar = yylex()) < 0) yychar = 0;
#if YYDEBUG
        if (yydebug)
        {
            yys = 0;
            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
            if (!yys) yys = "illegal-symbol";
            printf("%sdebug: state %d, reading %d (%s)\n",
                    YYPREFIX, yystate, yychar, yys);
        }
#endif
    }
    if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
    {
#if YYDEBUG
        if (yydebug)
            printf("%sdebug: state %d, shifting to state %d\n",
                    YYPREFIX, yystate, yytable[yyn]);
#endif
        if (yyssp >= yysslim && yygrowstack())
        {
            goto yyoverflow;
        }
        *++yyssp = yystate = yytable[yyn];
        *++yyvsp = yylval;
        yychar = (-1);
        if (yyerrflag > 0)  --yyerrflag;
        goto yyloop;
    }
    if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
    {
        yyn = yytable[yyn];
        goto yyreduce;
    }
    if (yyerrflag) goto yyinrecovery;
#if defined(lint) || defined(__GNUC__)
    goto yynewerror;
#endif
yynewerror:
    yyerror("syntax error");
#if defined(lint) || defined(__GNUC__)
    goto yyerrlab;
#endif
yyerrlab:
    ++yynerrs;
yyinrecovery:
    if (yyerrflag < 3)
    {
        yyerrflag = 3;
        for (;;)
        {
            if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
                    yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
            {
#if YYDEBUG
                if (yydebug)
                    printf("%sdebug: state %d, error recovery shifting\
 to state %d\n", YYPREFIX, *yyssp, yytable[yyn]);
#endif
                if (yyssp >= yysslim && yygrowstack())
                {
                    goto yyoverflow;
                }
                *++yyssp = yystate = yytable[yyn];
                *++yyvsp = yylval;
                goto yyloop;
            }
            else
            {
#if YYDEBUG
                if (yydebug)
                    printf("%sdebug: error recovery discarding state %d\n",
                            YYPREFIX, *yyssp);
#endif
                if (yyssp <= yyss) goto yyabort;
                --yyssp;
                --yyvsp;
            }
        }
    }
    else
    {
        if (yychar == 0) goto yyabort;
#if YYDEBUG
        if (yydebug)
        {
            yys = 0;
            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
            if (!yys) yys = "illegal-symbol";
            printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
                    YYPREFIX, yystate, yychar, yys);
        }
#endif
        yychar = (-1);
        goto yyloop;
    }
yyreduce:
#if YYDEBUG
    if (yydebug)
        printf("%sdebug: state %d, reducing by rule %d (%s)\n",
                YYPREFIX, yystate, yyn, yyrule[yyn]);
#endif
    yym = yylen[yyn];
    yyval = yyvsp[1-yym];
    switch (yyn)
    {
case 78:
#line 182 "st.y"
{
		struct sym_list *sl;
		if (yyvsp[-2].val == TYPEDEF) {
			/*printf("\ntypedef found: ");*/
			sl = yyvsp[-1].sl;
			while (sl != NULL) {
				/*printf("%s ", sl->sym->name);*/
				/* Change the symbol type from ID to TYPE_NAME */
				sl->sym->type = SYM_TYPE_TYPE_NAME;
				sl = sl->next;
			}
			/*printf ("\n");*/
		}
	}
break;
case 80:
#line 201 "st.y"
{
		yyval.val = yyvsp[-1].val;
	}
break;
case 87:
#line 214 "st.y"
{
		yyval.sl = (struct sym_list *)malloc(sizeof(struct sym_list));
		if (yyval.sl == NULL) {
			printf("out of memory\n");
			exit(1);
		}
		yyval.sl->sym = yyvsp[0].symp;
		yyval.sl->next = NULL;
	}
break;
case 88:
#line 224 "st.y"
{
		/*printf("multi init_declarator\n");*/
	}
break;
case 89:
#line 231 "st.y"
{
		yyval.symp = yyvsp[0].symp;
	}
break;
case 90:
#line 235 "st.y"
{
		yyval.symp = yyvsp[-2].symp;
	}
break;
case 91:
#line 241 "st.y"
{ yyval.val = TYPEDEF; }
break;
case 111:
#line 268 "st.y"
{
		fprintf(stderr, "found %s %d\n", yyvsp[-3].symp->name, g_depth);
		/*free($2->name);*/
		/*$2->name == NULL;*/
		g_depth --;
	}
break;
case 113:
#line 277 "st.y"
{
		g_depth --;
	}
break;
case 114:
#line 281 "st.y"
{
		g_depth --;
	}
break;
case 115:
#line 287 "st.y"
{ g_depth ++; }
break;
case 116:
#line 288 "st.y"
{ g_depth ++; }
break;
case 149:
#line 355 "st.y"
{
		yyval.symp = yyvsp[0].symp;
	}
break;
case 150:
#line 359 "st.y"
{
		yyval.symp = yyvsp[0].symp;
	}
break;
case 151:
#line 367 "st.y"
{
		yyval.symp = yyvsp[0].symp;
	}
break;
case 152:
#line 371 "st.y"
{
		yyval.symp = yyvsp[-1].symp;
	}
break;
#line 1586 "y.tab.c"
    }
    yyssp -= yym;
    yystate = *yyssp;
    yyvsp -= yym;
    yym = yylhs[yyn];
    if (yystate == 0 && yym == 0)
    {
#if YYDEBUG
        if (yydebug)
            printf("%sdebug: after reduction, shifting from state 0 to\
 state %d\n", YYPREFIX, YYFINAL);
#endif
        yystate = YYFINAL;
        *++yyssp = YYFINAL;
        *++yyvsp = yyval;
        if (yychar < 0)
        {
            if ((yychar = yylex()) < 0) yychar = 0;
#if YYDEBUG
            if (yydebug)
            {
                yys = 0;
                if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
                if (!yys) yys = "illegal-symbol";
                printf("%sdebug: state %d, reading %d (%s)\n",
                        YYPREFIX, YYFINAL, yychar, yys);
            }
#endif
        }
        if (yychar == 0) goto yyaccept;
        goto yyloop;
    }
    if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
            yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
        yystate = yytable[yyn];
    else
        yystate = yydgoto[yym];
#if YYDEBUG
    if (yydebug)
        printf("%sdebug: after reduction, shifting from state %d \
to state %d\n", YYPREFIX, *yyssp, yystate);
#endif
    if (yyssp >= yysslim && yygrowstack())
    {
        goto yyoverflow;
    }
    *++yyssp = yystate;
    *++yyvsp = yyval;
    goto yyloop;
yyoverflow:
    yyerror("yacc stack overflow");
yyabort:
    return (1);
yyaccept:
    return (0);
}
